/**
 * @param {'rect' | 'circle' | 'poly'| 'default'} shape
 * @param {string} coords
 * @returns {string | undefined}
 */
export function AreaCoords2PathD(shape, coords) {
  let pathData = "";
  const points = coords.split(",").map(Number);
  switch (shape) {
    case "rect": {
      // 矩形的转换
      // points should be in the format of [x1, y1, x2, y2]
      // 矩形形状，其左上角坐标为(x1, y1)，其右下角坐标为(x2, y2)，这两个坐标的垂直方向围成的面积定义了一个矩形
      let [x1, y1, x2, y2] = points;
      // 特殊检查(定义来自 whatwg)
      // - 如果第一个数字在数值上大于列表中的第三个数字，则交换这两个数字的位置
      if (x1 > x2) {
        [x1, x2] = [x2, x1];
      }
      // - 如果第二个数字在数值上大于列表中的第四个数字，则交换这两个数字的位置。
      if (y1 > y2) {
        [y1, y2] = [y2, y1];
      }
      pathData = `M${x1},${y1} L${x2},${y1} L${x2},${y2} L${x1},${y2} Z`;
      return pathData;
    }
    case "circle": {
      // 圆形的转换
      // points should be in the format of [cx, cy, r]
      // 形状是一个圆，其圆心位于左侧距离cx像素处，顶部距离cy像素处，半径为r像素。
      const [cx, cy, r] = points;
      // 特殊检查(定义来自 whatwg)
      // - 第三个数字小于或等于零，则形状为空；返回
      if (r <= 0) return;

      // 近似圆形路径，使用椭圆弧命令
      pathData = `M${cx + r},${cy} A${r},${r} 0 1 1 ${cx - r},${cy} A${r},${r} 0 1 1 ${cx + r},${cy} Z`;
      return pathData;
    }
    case "poly": {
      // 多边形的转换
      //  coords 中第(2i)的数 为xi，第(2i+1)的数 为 yi
      for (let i = 0; i < points.length; i += 2) {
        const x = points[i];
        const y = points[i + 1];
        pathData += i === 0 ? `M${x},${y}` : ` L${x},${y}`;
      }
      pathData += " Z";
      return pathData;
    }
    default:
  }
}
